<?php
class Model extends DB
{
    /**
     * @var array
     *
     * 'required',
     * 'email',
     * 'numeric',
     * 'maxLength',
     * 'minLength',
     */
    public $rules = array();
    public $attributes = array();
    public $tableName = '';


    public function insert($args = null){
        return $this->query('INSERT INTO ?n SET ?u ', $this->tableName, (empty($args)) ? $this->attributes : $args);
    }

    public function update($args = null){
        $condition = $this->parse((emtpy($args)) ? array('id=?i', $this->attributes['id']) : $args);
        return $this->query('UPDATE ?n SET ?u WHERE ?p', $this->tableName, $this->attributes, $condition);
    }

    public function validate()
    {
        if (!empty($this->attributes)) {
            foreach ($this->attributes as $key => $value) {
                $this->checkValue($value, $this->rules[$key]);
            }
        } else return false;
    }

    public function checkValue($value = null, $rule)
    {
        $hasError = null;
        $errorString = '';
        if (is_array($rule)) {
            foreach ($rule as $key => $item) {
                $checkRule = $key;
                $checkValue = (isset($item)) ? $item : null;
                switch ($checkRule) {
                    case 'required':
                        $hasError = (empty($value)) ? true : false;
                        $errorString = 'Пустое поле: ';
                        break;
                    case 'email':
                        $hasError = filter_var($value, FILTER_VALIDATE_EMAIL);
                        $errorString = 'Некорректный E-mail: ';
                        break;
                    case 'numeric':
                        $hasError = filter_var($value, FILTER_VALIDATE_INT);
                        $errorString = 'Значение должно быть целым числом: ';
                        break;
                    case 'maxLength':
                        $hasError = (strlen($value) > (int)$checkValue);
                        $errorString = 'Значение должно быть целым числом: ';
                        break;
                    default:
                        $hasError = true;
                        $errorString = 'Не указано правило валидации';
                        break;
                }
            }
        } else {
            $hasError = true;
            $errorString = 'Неверно указано правило валидации, ожидается массив';
        }
        return array($hasError, $errorString);
    }
}